import java.util.ArrayList;


public class KeyGeneration {
	
	int prevNum = 0;
	int symbol = 0;
	ArrayList<Character> privateKey = new ArrayList<Character>();
	
	/**
	 * Convert the character array list to a string
	 * @param c -> Character array list
	 * @return
	 */
	public String convertToString(ArrayList<Character> c){
		StringBuilder b = new StringBuilder(c.size());
		for(int i = 0; i < c.size(); i++)
			b.append(c.get(i));
		return b.toString();
	}
	
	public String getKey(){
		return convertToString(privateKey);
	}
	
	/**
	 * Actually generate the 128 bit socket key
	 * @return
	 */
	public ArrayList<Character> generatePrivateKey(){
		for(int i = 0; i < 126; i++){
			int rand = ((int)(122*Math.random()))%61;
			int sym = ((int)(100*Math.random()))%3;
			int newElement = 0;
			if(symbol == 0)
				newElement = (prevNum + rand) % 61;
			if(symbol == 1)
				newElement = (prevNum - rand) % 61;
			if(symbol == 2)
				newElement = (prevNum * rand) % 61;
			if(newElement < 0)
				newElement *= -1;
			char c = convert(newElement);
			privateKey.add(c);
			symbol = sym;
			prevNum = newElement;
		}
		return privateKey;
	}
	
	
	/**
	 * Convert the int returned into a character
	 */
	public char convert(int i){
		if(i == 0)
			return '0';
		if(i == 1)
			return '1';
		if(i == 2)
			return '2';
		if(i == 3)
			return '3';
		if(i == 4)
			return '4';
		if(i == 5)
			return '5';
		if(i == 6)
			return '6';
		if(i == 7)
			return '7';
		if(i == 8)
			return '8';
		if(i == 9)
			return '9';
		if(i == 10)
			return 'A';
		if(i == 11)
			return 'B';
		if(i == 12)
			return 'C';
		if(i == 13)
			return 'D';
		if(i == 14)
			return 'E';
		if(i == 15)
			return 'F';
		if(i == 16)
			return 'G';
		if(i == 17)
			return 'H';
		if(i == 18)
			return 'I';
		if(i == 19)
			return 'J';
		if(i == 20)
			return 'K';
		if(i == 21)
			return 'L';
		if(i == 22)
			return 'M';
		if(i == 23)
			return 'N';
		if(i == 24)
			return 'O';
		if(i == 25)
			return 'P';
		if(i == 26)
			return 'Q';
		if(i == 27)
			return 'R';
		if(i == 28)
			return 'S';
		if(i == 29)
			return 'T';
		if(i == 30)
			return 'U';
		if(i == 31)
			return 'V';
		if(i == 32)
			return 'W';
		if(i == 33)
			return 'X';
		if(i == 34)
			return 'Y';
		if(i == 35)
			return 'Z';
		if(i == 36)
			return 'a';
		if(i == 37)
			return 'b';
		if(i == 38)
			return 'c';
		if(i == 39)
			return 'd';
		if(i == 40)
			return 'e';
		if(i == 41)
			return 'f';
		if(i == 42)
			return 'g';
		if(i == 43)
			return 'h';
		if(i == 44)
			return 'i';
		if(i == 45)
			return 'j';
		if(i == 46)
			return 'k';
		if(i == 47)
			return 'l';
		if(i == 48)
			return 'm';
		if(i == 49)
			return 'n';
		if(i == 50)
			return 'o';
		if(i == 51)
			return 'p';
		if(i == 52)
			return 'q';
		if(i == 53)
			return 'r';
		if(i == 54)
			return 's';
		if(i == 55)
			return 't';
		if(i == 56)
			return 'u';
		if(i == 57)
			return 'v';
		if(i == 58)
			return 'w';
		if(i == 59)
			return 'x';
		if(i == 60)
			return 'y';
		if(i == 61)
			return 'z';
		return '0';
	}
}
